<script setup>
import { ref, reactive, computed, onMounted } from 'vue'
import { ElMessage } from 'element-plus'
import FaultLocation from './diagnose/FaultLocation.vue'
import FaultAnalysisReport from './diagnose/FaultAnalysisReport.vue'
import KnowledgeBaseDisplay from './diagnose/KnowledgeBaseDisplay.vue'

// 当前故障数据
const currentFault = reactive({
  id: 'FAULT-2023091201',
  device: '导弹发射车-001',
  subsystem: '火控系统',
  component: '红外传感器阵列',
  faultCode: 'FC-IRS-005',
  severity: '高',
  detectedTime: '2023-09-12 14:30:22',
  status: '待分析',
  description: '红外传感器阵列输出信号异常，偏差超过阈值范围',
  sensorData: {
    temperature: { value: 42.5, unit: '°C', status: '异常' },
    voltage: { value: 3.2, unit: 'V', status: '正常' },
    output: { value: 0.85, unit: 'V', status: '异常', normalRange: [1.2, 1.8] },
    noise: { value: 0.12, unit: 'mV', status: '异常' }
  }
})

// 故障分析报告
const analysisReport = ref({
  generated: false,
  content: '',
  loading: false
})

// 关联知识库
const relatedKnowledge = ref([])

// 诊断历史
const diagnosisHistory = ref([])

// 模拟生成故障分析报告
const generateAnalysisReport = () => {
  analysisReport.value.loading = true
  // 模拟LLM+RAG处理时间
  setTimeout(() => {
    analysisReport.value.content = `
## 故障诊断报告：红外传感器阵列异常

### 故障原因分析
根据传感器数据和历史维护记录，我们分析故障原因如下：

1. **热漂移现象（可能性: 85%）**
   - 当前传感器温度42.5°C（正常范围：25-35°C），高温导致红外传感器灵敏度下降
   - 参考知识库：第3章第5节《高温环境下传感器性能衰减》

2. **光学窗口污染（可能性: 60%）**
   - 最近维护记录显示光学窗口已使用超过200小时（建议每150小时清洁）
   - 历史案例：2023-07-15 类似故障（案例ID: CL-20230715-IRS003）

3. **电路老化（可能性: 30%）**
   - 该传感器已使用8500小时（设计寿命10000小时）
   - 检测到电路噪声水平0.12mV（正常<0.05mV）

### 维修建议
1. **立即措施**
   - 冷却系统工作30分钟，观察温度是否下降
   - 使用专用清洁工具清洁光学窗口（工具编号：CL-IRS-05）

2. **部件更换**
   - 如温度降后输出未恢复，更换红外传感器模块（备件编号：IRS-MOD-002）

3. **长期维护**
   - 增加温度监控报警阈值（建议设置38°C报警）
   - 优化冷却系统风道设计（参考技术手册第8章）

### 安全注意事项
⚠️ 操作时确保系统断电
⚠️ 使用防静电工具包（ESD-KIT-003）
⚠️ 更换后需进行校准（参考校准流程CAL-IRS-2023）
    `
    analysisReport.value.generated = true
    analysisReport.value.loading = false

    // 添加知识库关联
    relatedKnowledge.value = [
      {
        id: 'KB-IRS-003',
        title: '红外传感器高温性能衰减研究',
        source: '技术手册第3章第5节',
        content: '红外传感器在温度超过35°C时，每升高1°C灵敏度下降2.5%。在40-45°C环境下，建议运行时间不超过30分钟...',
        relevance: 95
      },
      {
        id: 'KB-CASE-20230715',
        title: '红外传感器信号异常案例',
        source: '历史维修案例库',
        content: '2023年7月15日，导弹发射车-003号出现类似故障，原因为光学窗口污染。清洁后恢复正常...',
        relevance: 88
      },
      {
        id: 'KB-MAINT-IRS',
        title: '红外传感器维护指南',
        source: '维护手册第8章',
        content: '红外传感器阵列维护周期：每150工作小时或每月进行一次全面清洁和校准...',
        relevance: 78
      }
    ]

    // 添加第一条诊断历史
    diagnosisHistory.value.push({
      id: 'DH-001',
      question: "生成故障分析报告",
      answer: "已生成包含故障原因分析、维修建议和安全注意事项的完整报告",
      time: new Date().toLocaleString('zh-CN', { hour12: false })
    })

    ElMessage.success('故障分析报告已生成')
  }, 2000)
}

// 处理用户提问
const handleUserQuestion = (question) => {
  // 模拟AI处理
  const loadingId = ElMessage.loading('AI分析中...', {
    duration: 0
  })

  setTimeout(() => {
    let answer = ""

    // 根据问题类型生成回答
    if (question.includes("为什么") && question.includes("而不是")) {
      answer = `您的问题涉及故障定位的依据。选择传感器A而非B的原因如下：

1. **数据相关性分析**：
   - 传感器A的输出偏差与故障现象相关系数达0.92，而传感器B仅为0.45

2. **历史故障模式**：
   - 过去6个月发生的8起类似故障中，7起与传感器A相关

3. **诊断规则库**：
   - 根据诊断规则FC-IRS-RULE005，当温度>40°C且输出<1.0V时，优先怀疑传感器A

详细分析参考知识库文档：DIAG-RULES-IRS-2023`
    } else if (question.includes("更换步骤")) {
      answer = `红外传感器更换步骤：

1. **准备工作**：
   - 确保系统断电（使用电压检测仪确认）
   - 准备防静电工具包（ESD-KIT-003）

2. **拆卸旧传感器**：
   - 卸下4个固定螺丝（TORX T10）
   - 断开电源接口（注意锁扣方向）

3. **安装新传感器**：
   - 对位安装（注意箭头方向标识）
   - 按对角线顺序紧固螺丝（扭矩0.8N·m）

4. **校准**：
   - 连接诊断接口
   - 运行校准程序CAL-IRS-2023
   - 确认输出值在1.5±0.1V范围

⚠️ 全程佩戴防静电腕带
⚠️ 操作时间控制在15分钟内防止系统过热`
    } else {
      answer = `根据当前故障诊断分析：

- **根本原因**：高温导致的热漂移（85%可能性）
- **临时解决方案**：启动冷却系统降低工作温度
- **长期解决方案**：优化冷却风道设计并更换传感器

详细的技术依据可在知识库文档"IRS-TROUBLESHOOT-2023"中查看第5章节。`
    }

    // 添加到历史记录
    diagnosisHistory.value.push({
      id: `DH-${diagnosisHistory.value.length + 1}`,
      question,
      answer,
      time: new Date().toLocaleString('zh-CN', { hour12: false })
    })

    ElMessage.close(loadingId)
    ElMessage.success('AI分析完成')
  }, 1500)
}
</script>

<template>
  <div class="fault-diagnosis-container">
    <div class="diagnosis-header">
      <div class="header-left">
        <h1><i class="fas fa-bug"></i> 故障诊断分析系统</h1>
        <p>设备: {{ currentFault.device }} | 子系统: {{ currentFault.subsystem }} | 故障代码: {{ currentFault.faultCode }}</p>
      </div>
      <div class="header-right">
        <el-tag type="danger" size="large">
          <i class="fas fa-exclamation-triangle"></i> 优先级: {{ currentFault.severity }}
        </el-tag>
      </div>
    </div>

    <div class="diagnosis-content">
      <div class="left-column">
        <FaultLocation :fault="currentFault" />

        <FaultAnalysisReport
            :report="analysisReport"
            @generate-report="generateAnalysisReport"
        />
      </div>

      <div class="right-column">
        <KnowledgeBaseDisplay :knowledge="relatedKnowledge" />

        <InteractiveDiagnosis
            :history="diagnosisHistory"
            @ask-question="handleUserQuestion"
        />
      </div>
    </div>
  </div>
</template>

<style scoped>
.fault-diagnosis-container {
  background-color: #0f1c3c;
  color: #e4e8f0;
  padding: 20px;
  height: 100vh;
  overflow-y: auto;
}

.diagnosis-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 20px;
  padding: 15px;
  background: linear-gradient(90deg, #1a2a52, #0a1a3a);
  border-radius: 12px;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);
  border: 1px solid #2a3a6a;
}

.header-left h1 {
  font-size: 24px;
  font-weight: 600;
  background: linear-gradient(to right, #ff7e5f, #feb47b);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  margin-bottom: 5px;
}

.header-left p {
  font-size: 14px;
  color: #a0b1d0;
}

.diagnosis-content {
  display: flex;
  gap: 20px;
  height: calc(100% - 90px);
}

.left-column {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 20px;
}

.right-column {
  width: 40%;
  display: flex;
  flex-direction: column;
  gap: 20px;
}

@media (max-width: 1200px) {
  .diagnosis-content {
    flex-direction: column;
  }

  .right-column {
    width: 100%;
  }
}
</style>